Crate tree_magic_fork

Source
Expand description

tree_magic is a Rust crate that determines the MIME type a given file or byte stream.

§About

tree_magic is designed to be more efficient and to have less false positives compared to the old approach used by libmagic, or old-fashioned file extension comparisons.

Instead, this loads all known MIME types into a tree based on subclasses. Then, instead of checking against every file type, tree_magic will traverse down the tree and only check the files that make sense to check.

§Features

  • Very fast perfomance (~150ns to check one file against one type, between 5,000ns and 100,000ns to find a MIME type.)
  • Check if a file is a certain type.
  • Handles aliases (ex: application/zip vs application/x-zip-compressed)
  • Uses system FreeDesktop.org magic files on Linux systems, and built-in magic file on Windows and macOS.
  • Can delegate different file types to different “checkers”, reducing false positives by choosing a different method of attack.

§Feature flags

cli: Enable building of tmagic binary

staticmime: Change output of all from_* functions from String to &'static str. Disables ability to load system magic files. Slightly faster.

§Example

extern crate tree_magic;
 
// Load a GIF file
let input: &[u8] = include_bytes!("tests/image/gif");

// Find the MIME type of the GIF
let result = tree_magic::from_u8(input);
assert_eq!(result, "image/gif");

// Check if the MIME and the file are a match
let result = tree_magic::match_u8("image/gif", input);
assert_eq!(result, true);

Structs§

  • The TypeStruct autogenerated at library init, and used by the library.
  • Information about currently loaded MIME types

Enums§

  • Cache used for each checker for each file

Functions§

  • Gets the type of a file from a filepath.
  • Gets the type of a file from a filepath, starting at a certain node in the type graph.
  • Gets the type of a file from a byte stream.
  • Gets the type of a file from a raw bytestream, starting at a certain node in the type graph.
  • Determines if a MIME is an alias of another MIME
  • Check if the given filepath matches the given MIME type.
  • Checks if the given bytestream matches the given MIME type.